리μ‘νΈ μ»¨ν μ€νΈ μ λ ν° ν¨ν΄μΌλ‘ 리λ λλ§μ μ΅μ ννκ³ μ± μ±λ₯μ ν₯μμν€λ λ°©λ²μ λ°°μ°μΈμ. μ€μ©μ μΈ μμ μ κΈλ‘λ² λͺ¨λ² μ¬λ‘λ₯Ό ν¬ν¨ν©λλ€.
리μ‘νΈ μ»¨ν μ€νΈ μ λ ν° ν¨ν΄: μ±λ₯ μ΅μ νλ₯Ό μν 리λ λλ§ μ΅μ ν
리μ‘νΈ Context APIλ μ ν리μΌμ΄μ μ μ μ μνλ₯Ό κ΄λ¦¬νλ κ°λ ₯ν λ°©λ²μ μ 곡ν©λλ€. νμ§λ§ Contextλ₯Ό μ¬μ©ν λ νν λ°μνλ λ¬Έμ μ μ λΆνμν 리λ λλ§μ λλ€. Context κ°μ΄ λ³κ²½λλ©΄, ν΄λΉ Contextλ₯Ό μ¬μ©νλ λͺ¨λ μ»΄ν¬λνΈλ Context λ°μ΄ν°μ μμ μΌλΆμλ§ μμ‘΄νλλΌλ 리λ λλ§λ©λλ€. μ΄λ νΉν ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ μμ μ±λ₯ λ³λͺ© νμμ μ λ°ν μ μμ΅λλ€. 컨ν μ€νΈ μ λ ν° ν¨ν΄μ μ»΄ν¬λνΈκ° νμν Contextμ νΉμ λΆλΆλ§ ꡬλ νλλ‘ νμ¬ λΆνμν 리λ λλ§μ ν¬κ² μ€μ΄λ ν΄κ²°μ± μ μ 곡ν©λλ€.
λ¬Έμ μ΄ν΄νκΈ°: λΆνμν 리λ λλ§
μλ₯Ό λ€μ΄ μ€λͺ ν΄ λ³΄κ² μ΅λλ€. μ¬μ©μ μ 보(μ΄λ¦, μ΄λ©μΌ, κ΅κ°, μΈμ΄ μ€μ , μ₯λ°κ΅¬λ νλͺ©)λ₯Ό Context Providerμ μ μ₯νλ μ μμκ±°λ μ ν리μΌμ΄μ μ μμν΄ λ³΄μΈμ. μ¬μ©μκ° μΈμ΄ μ€μ μ μ λ°μ΄νΈνλ©΄, μ¬μ©μμ μ΄λ¦λ§ νμνλ μ»΄ν¬λνΈλ₯Ό ν¬ν¨νμ¬ Contextλ₯Ό μ¬μ©νλ λͺ¨λ μ»΄ν¬λνΈκ° 리λ λλ§λ©λλ€. μ΄λ λΉν¨μ¨μ μ΄λ©° μ¬μ©μ κ²½νμ μν₯μ μ€ μ μμ΅λλ€. λ€λ₯Έ μ§μμ μ¬μ©μλ€μ μκ°ν΄ 보μΈμ. λ―Έκ΅ μ¬μ©μκ° νλ‘νμ μ λ°μ΄νΈν λ μ λ½ μ¬μ©μμ μΈλΆ μ 보λ₯Ό νμνλ μ»΄ν¬λνΈλ *μ* 리λ λλ§λμ΄μΌ ν©λλ€.
리λ λλ§μ΄ μ€μν μ΄μ
- μ±λ₯ μν₯: λΆνμν 리λ λλ§μ κ·μ€ν CPU μ¬μ΄ν΄μ μλͺ¨νμ¬ λ λλ§ μλλ₯Ό μ νμν€κ³ μ¬μ©μ μΈν°νμ΄μ€μ λ°μμ±μ λ¨μ΄λ¨λ¦½λλ€. μ΄λ νΉν μ μ¬μ κΈ°κΈ°λ 볡μ‘ν μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό κ°μ§ μ ν리μΌμ΄μ μμ λλλ¬μ§λλ€.
- μμ λλΉ: λ³κ²½λμ§ μμ μ»΄ν¬λνΈλ₯Ό 리λ λλ§νλ κ²μ λ©λͺ¨λ¦¬μ λ€νΈμν¬ λμνκ³Ό κ°μ μμμ λλΉνλ©°, νΉν λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ λΉμ©μ΄ λ§μ΄ λλ κ³μ°μ μνν λ λμ± κ·Έλ μ΅λλ€.
- μ¬μ©μ κ²½ν: λλ¦¬κ³ λ°μμ΄ μλ UIλ μ¬μ©μλ₯Ό μ’μ μν€κ³ μ’μ§ μμ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
컨ν μ€νΈ μ λ ν° ν¨ν΄ μκ°
컨ν
μ€νΈ μ
λ ν° ν¨ν΄μ μ»΄ν¬λνΈκ° νμν Contextμ νΉμ λΆλΆμλ§ κ΅¬λ
ν μ μλλ‘ νμ¬ λΆνμν 리λ λλ§ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€. μ΄λ Context κ°μμ νμν λ°μ΄ν°λ₯Ό μΆμΆνλ μ
λ ν° ν¨μλ₯Ό μ¬μ©νμ¬ λ¬μ±λ©λλ€. Context κ°μ΄ λ³κ²½λλ©΄ 리μ‘νΈλ μ
λ ν° ν¨μμ κ²°κ³Όλ₯Ό λΉκ΅ν©λλ€. μ νλ λ°μ΄ν°κ° λ³κ²½λμ§ μμλ€λ©΄(μ격ν λλ±μ±, ===
μ¬μ©), μ»΄ν¬λνΈλ 리λ λλ§λμ§ μμ΅λλ€.
μλ λ°©μ
- Context μ μ:
React.createContext()
λ₯Ό μ¬μ©νμ¬ λ¦¬μ‘νΈ Contextλ₯Ό μμ±ν©λλ€. - Provider μμ±: μ ν리μΌμ΄μ λλ κ΄λ ¨ μΉμ μ Context Providerλ‘ κ°μΈ μμ μ»΄ν¬λνΈμμ Context κ°μ μ¬μ©ν μ μλλ‘ ν©λλ€.
- μ λ ν° κ΅¬ν: Context κ°μμ νΉμ λ°μ΄ν°λ₯Ό μΆμΆνλ μ λ ν° ν¨μλ₯Ό μ μν©λλ€. μ΄ ν¨μλ€μ μμ ν¨μμ¬μΌ νλ©° νμν λ°μ΄ν°λ§ λ°νν΄μΌ ν©λλ€.
- μ
λ ν° μ¬μ©:
useContext
μ μ λ ν° ν¨μλ₯Ό νμ©νλ 컀μ€ν ν (λλ λΌμ΄λΈλ¬λ¦¬)μ μ¬μ©νμ¬ μ νλ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ ν΄λΉ λ°μ΄ν°μ λ³κ²½ μ¬νμλ§ κ΅¬λ ν©λλ€.
컨ν μ€νΈ μ λ ν° ν¨ν΄ ꡬννκΈ°
λͺλͺ λΌμ΄λΈλ¬λ¦¬μ 컀μ€ν ꡬνμ ν΅ν΄ 컨ν μ€νΈ μ λ ν° ν¨ν΄μ μ½κ² μ μ©ν μ μμ΅λλ€. 컀μ€ν ν μ μ¬μ©νλ μΌλ°μ μΈ μ κ·Ό λ°©μμ μ΄ν΄λ³΄κ² μ΅λλ€.
μμ : κ°λ¨ν μ¬μ©μ 컨ν μ€νΈ
λ€μκ³Ό κ°μ ꡬ쑰λ₯Ό κ°μ§ μ¬μ©μ 컨ν μ€νΈλ₯Ό κ³ λ €ν΄ λ³΄μΈμ:
const UserContext = React.createContext({
name: 'John Doe',
email: 'john.doe@example.com',
country: 'USA',
language: 'en',
theme: 'light'
});
1. Context μμ±νκΈ°
const UserContext = React.createContext({
name: 'John Doe',
email: 'john.doe@example.com',
country: 'USA',
language: 'en',
theme: 'light'
});
2. Provider μμ±νκΈ°
const UserProvider = ({ children }) => {
const [user, setUser] = React.useState({
name: 'John Doe',
email: 'john.doe@example.com',
country: 'USA',
language: 'en',
theme: 'light'
});
const updateUser = (updates) => {
setUser(prevUser => ({ ...prevUser, ...updates }));
};
const value = React.useMemo(() => ({ user, updateUser }), [user]);
return (
{children}
);
};
3. μ λ ν°λ₯Ό ν¬ν¨ν 컀μ€ν ν μμ±νκΈ°
import React from 'react';
function useUserContext() {
const context = React.useContext(UserContext);
if (!context) {
throw new Error('useUserContext must be used within a UserProvider');
}
return context;
}
function useUserSelector(selector) {
const context = useUserContext();
const [selected, setSelected] = React.useState(() => selector(context.user));
React.useEffect(() => {
setSelected(selector(context.user)); // μ΄κΈ° μ ν
const unsubscribe = context.updateUser;
return () => {}; // μ΄ κ°λ¨ν μμ μμλ μ€μ ꡬλ
ν΄μ§κ° νμνμ§ μμΌλ―λ‘, λ©λͺ¨μ΄μ μ΄μ
μ μλλ₯Ό μ°Έμ‘°νμΈμ.
}, [context.user, selector]);
return selected;
}
μ€μ μ°Έκ³ : μμ `useEffect`λ μ μ ν λ©λͺ¨μ΄μ μ΄μ μ΄ λΆμ‘±ν©λλ€. `context.user`κ° λ³κ²½λ λλ§λ€ μ νλ κ°μ΄ λμΌνλλΌλ *νμ* μ¬μ€νλ©λλ€. κ°λ ₯νκ³ λ©λͺ¨μ΄μ¦λ μ λ ν°λ₯Ό μνλ€λ©΄ λ€μ μΉμ μ΄λ `use-context-selector`μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ°Έμ‘°νμΈμ.
4. μ»΄ν¬λνΈμμ μ λ ν° ν μ¬μ©νκΈ°
function UserName() {
const name = useUserSelector(user => user.name);
return Name: {name}
;
}
function UserEmail() {
const email = useUserSelector(user => user.email);
return Email: {email}
;
}
function UserCountry() {
const country = useUserSelector(user => user.country);
return Country: {country}
;
}
μ΄ μμ μμ UserName
, UserEmail
, UserCountry
μ»΄ν¬λνΈλ κ°κ° μ νν νΉμ λ°μ΄ν°(μ΄λ¦, μ΄λ©μΌ, κ΅κ°)κ° λ³κ²½λ λλ§ λ¦¬λ λλ§λ©λλ€. λ§μ½ μ¬μ©μμ μΈμ΄ μ€μ μ΄ μ
λ°μ΄νΈλλλΌλ, μ΄ μ»΄ν¬λνΈλ€μ 리λ λλ§λμ§ μμ μλΉν μ±λ₯ ν₯μμ κ°μ Έμ΅λλ€.
μ λ ν°μ κ° λ©λͺ¨μ΄μ μ΄μ : μ΅μ νμ νμ μμ
컨ν μ€νΈ μ λ ν° ν¨ν΄μ΄ μ§μ μΌλ‘ ν¨κ³Όμ μ΄λ €λ©΄ λ©λͺ¨μ΄μ μ΄μ μ΄ μ€μν©λλ€. λ©λͺ¨μ΄μ μ΄μ μμ΄λ μ λ ν° ν¨μκ° κΈ°λ³Έ λ°μ΄ν°κ° μλ―Έμ λ³κ²½λμ§ μμμμλ λΆκ΅¬νκ³ μλ‘μ΄ κ°μ²΄λ λ°°μ΄μ λ°ννμ¬ λΆνμν 리λ λλ§μ μ λ°ν μ μμ΅λλ€. λ§μ°¬κ°μ§λ‘, Provider κ° λν λ©λͺ¨μ΄μ¦νλ κ²μ΄ μ€μν©λλ€.
useMemo
λ‘ Provider κ° λ©λͺ¨μ΄μ¦νκΈ°
useMemo
ν
μ UserContext.Provider
μ μ λ¬λλ κ°μ λ©λͺ¨μ΄μ¦νλ λ° μ¬μ©λ μ μμ΅λλ€. μ΄λ κΈ°λ³Έ μμ‘΄μ±μ΄ λ³κ²½λ λλ§ Provider κ°μ΄ λ³κ²½λλλ‘ λ³΄μ₯ν©λλ€.
const UserProvider = ({ children }) => {
const [user, setUser] = React.useState({
name: 'John Doe',
email: 'john.doe@example.com',
country: 'USA',
language: 'en',
theme: 'light'
});
const updateUser = (updates) => {
setUser(prevUser => ({ ...prevUser, ...updates }));
};
// providerμ μ λ¬λ κ° λ©λͺ¨μ΄μ¦
const value = React.useMemo(() => ({
user,
updateUser
}), [user, updateUser]);
return (
{children}
);
};
useCallback
μΌλ‘ μ
λ ν° λ©λͺ¨μ΄μ¦νκΈ°
λ§μ½ μ
λ ν° ν¨μκ° μ»΄ν¬λνΈ λ΄λΆμ μΈλΌμΈμΌλ‘ μ μλλ©΄, λ
Όλ¦¬μ μΌλ‘ λμΌνλλΌλ λ§€ λ λλ§λ§λ€ λ€μ μμ±λ©λλ€. μ΄λ 컨ν
μ€νΈ μ
λ ν° ν¨ν΄μ λͺ©μ μ 무λ ₯νμν¬ μ μμ΅λλ€. μ΄λ₯Ό λ°©μ§νκΈ° μν΄ useCallback
ν
μ μ¬μ©νμ¬ μ
λ ν° ν¨μλ₯Ό λ©λͺ¨μ΄μ¦νμΈμ.
function UserName() {
// μ
λ ν° ν¨μ λ©λͺ¨μ΄μ¦
const nameSelector = React.useCallback(user => user.name, []);
const name = useUserSelector(nameSelector);
return Name: {name}
;
}
κΉμ λΉκ΅μ λΆλ³ λ°μ΄ν° ꡬ쑰
Context λ΄μ λ°μ΄ν°κ° κΉκ² μ€μ²©λμ΄ μκ±°λ λ³κ²½ κ°λ₯ν κ°μ²΄λ₯Ό ν¬ν¨νλ λ 볡μ‘ν μλ리μ€μ κ²½μ°, λΆλ³ λ°μ΄ν° ꡬ쑰(μ: Immutable.js, Immer)λ₯Ό μ¬μ©νκ±°λ μ λ ν°μ κΉμ λΉκ΅ ν¨μλ₯Ό ꡬννλ κ²μ κ³ λ €ν΄ λ³΄μΈμ. μ΄λ κΈ°λ³Έ κ°μ²΄κ° λ΄λΆμ μΌλ‘ λ³κ²½λμμ λλ λ³κ²½ μ¬νμ΄ μ¬λ°λ₯΄κ² κ°μ§λλλ‘ λ³΄μ₯ν©λλ€.
컨ν μ€νΈ μ λ ν° ν¨ν΄μ μν λΌμ΄λΈλ¬λ¦¬
λͺλͺ λΌμ΄λΈλ¬λ¦¬λ 컨ν μ€νΈ μ λ ν° ν¨ν΄ ꡬνμ μν μ¬μ ꡬμΆλ μ루μ μ μ 곡νμ¬ νλ‘μΈμ€λ₯Ό λ¨μννκ³ μΆκ° κΈ°λ₯μ μ 곡ν©λλ€.
use-context-selector
use-context-selector
λ μ΄ λͺ©μ μ μν΄ νΉλ³ν μ€κ³λ μΈκΈ° μκ³ μ κ΄λ¦¬λλ λΌμ΄λΈλ¬λ¦¬μ
λλ€. Contextμμ νΉμ κ°μ μ ννκ³ λΆνμν 리λ λλ§μ λ°©μ§νλ κ°λ¨νκ³ ν¨μ¨μ μΈ λ°©λ²μ μ 곡ν©λλ€.
μ€μΉ:
npm install use-context-selector
μ¬μ©λ²:
import { useContextSelector } from 'use-context-selector';
function UserName() {
const name = useContextSelector(UserContext, user => user.name);
return Name: {name}
;
}
Valtio
Valtioλ ν¨μ¨μ μΈ μν μ λ°μ΄νΈμ μ νμ 리λ λλ§μ μν΄ νλ‘μλ₯Ό νμ©νλ λ ν¬κ΄μ μΈ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μ λλ€. μν κ΄λ¦¬μ λ€λ₯Έ μ κ·Ό λ°©μμ μ 곡νμ§λ§ 컨ν μ€νΈ μ λ ν° ν¨ν΄κ³Ό μ μ¬ν μ±λ₯ μ΄μ μ μ»λ λ° μ¬μ©λ μ μμ΅λλ€.
컨ν μ€νΈ μ λ ν° ν¨ν΄μ μ΄μ
- μ±λ₯ ν₯μ: λΆνμν 리λ λλ§μ μ€μ¬ λ λ°μμ± μκ³ ν¨μ¨μ μΈ μ ν리μΌμ΄μ μ λ§λλλ€.
- λ©λͺ¨λ¦¬ μλΉ κ°μ: μ»΄ν¬λνΈκ° λΆνμν λ°μ΄ν°μ ꡬλ νλ κ²μ λ°©μ§νμ¬ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ λλ€.
- μ μ§λ³΄μμ± μ¦κ°: κ° μ»΄ν¬λνΈμ λ°μ΄ν° μμ‘΄μ±μ λͺ μμ μΌλ‘ μ μνμ¬ μ½λμ λͺ νμ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν΅λλ€.
- νμ₯μ± ν₯μ: μ»΄ν¬λνΈ μμ μνμ 볡μ‘μ±μ΄ μ¦κ°ν¨μ λ°λΌ μ ν리μΌμ΄μ μ λ μ½κ² νμ₯ν μ μλλ‘ ν©λλ€.
컨ν μ€νΈ μ λ ν° ν¨ν΄μ μ¬μ©ν΄μΌ ν λ
컨ν μ€νΈ μ λ ν° ν¨ν΄μ λ€μκ³Ό κ°μ μλ리μ€μμ νΉν μ μ©ν©λλ€:
- ν° Context κ°: Contextκ° λλμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ»΄ν¬λνΈλ κ·Έ μ€ μμ μΌλΆλ§ νμλ‘ ν λ.
- λΉλ²ν Context μ λ°μ΄νΈ: Context κ°μ΄ μμ£Ό μ λ°μ΄νΈλμ΄ λ¦¬λ λλ§μ μ΅μννκ³ μΆμ λ.
- μ±λ₯μ λ―Όκ°ν μ»΄ν¬λνΈ: νΉμ μ»΄ν¬λνΈκ° μ±λ₯μ λ―Όκ°νμ¬ νμν λλ§ λ¦¬λ λλ§λλλ‘ λ³΄μ₯νκ³ μΆμ λ.
- 볡μ‘ν μ»΄ν¬λνΈ νΈλ¦¬: λΆνμν 리λ λλ§μ΄ νΈλ¦¬λ₯Ό λ°λΌ μ νλμ΄ μ±λ₯μ μ¬κ°ν μν₯μ λ―ΈμΉ μ μλ κΉμ μ»΄ν¬λνΈ νΈλ¦¬λ₯Ό κ°μ§ μ ν리μΌμ΄μ μμ. μ μΈκ³μ λΆμ°λ νμ΄ λ³΅μ‘ν λμμΈ μμ€ν μ μμ νλ κ²½μ°λ₯Ό μμν΄ λ³΄μΈμ. ν μμΉμμ λ²νΌ μ»΄ν¬λνΈλ₯Ό λ³κ²½νλ©΄ μ 체 μμ€ν μ κ±Έμ³ λ¦¬λ λλ§μ΄ λ°μνμ¬ λ€λ₯Έ μκ°λμ κ°λ°μμκ² μν₯μ λ―ΈμΉ μ μμ΅λλ€.
컨ν μ€νΈ μ λ ν° ν¨ν΄μ λμ
컨ν μ€νΈ μ λ ν° ν¨ν΄μ κ°λ ₯ν λꡬμ΄μ§λ§, 리μ‘νΈμμ 리λ λλ§μ μ΅μ ννλ μ μΌν ν΄κ²°μ± μ μλλλ€. λͺ κ°μ§ λμμ μΈ μ κ·Ό λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
- Redux: Reduxλ λ¨μΌ μ€ν μ΄μ μμΈ‘ κ°λ₯ν μν μ λ°μ΄νΈλ₯Ό μ¬μ©νλ μΈκΈ° μλ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μ λλ€. μν μ λ°μ΄νΈμ λν μΈλ°ν μ μ΄λ₯Ό μ 곡νλ©° λΆνμν 리λ λλ§μ λ°©μ§νλ λ° μ¬μ©λ μ μμ΅λλ€.
- MobX: MobXλ κ΄μ°° κ°λ₯ν λ°μ΄ν°μ μλ μμ‘΄μ± μΆμ μ μ¬μ©νλ λ λ€λ₯Έ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μ λλ€. μμ‘΄μ±μ΄ λ³κ²½λ λλ§ μ»΄ν¬λνΈλ₯Ό μλμΌλ‘ 리λ λλ§ν©λλ€.
- Zustand: λ¨μνλ flux μμΉμ μ¬μ©νλ μκ³ λΉ λ₯΄λ©° νμ₯ κ°λ₯ν μ΅μνμ μν κ΄λ¦¬ μ루μ μ λλ€.
- Recoil: Recoilμ νμ΄μ€λΆμμ λ§λ μ€νμ μΈ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ‘, atomκ³Ό selectorλ₯Ό μ¬μ©νμ¬ μν μ λ°μ΄νΈλ₯Ό μΈλ°νκ² μ μ΄νκ³ λΆνμν 리λ λλ§μ λ°©μ§ν©λλ€.
- μ»΄ν¬λνΈ ν©μ±: μ΄λ€ κ²½μ°μλ λ°μ΄ν°λ₯Ό μ»΄ν¬λνΈ propsλ₯Ό ν΅ν΄ μ λ¬ν¨μΌλ‘μ¨ μ μ μν μ¬μ©μ μμ ν νΌν μ μμ΅λλ€. μ΄λ μ±λ₯μ ν₯μμν€κ³ μ ν리μΌμ΄μ μ μν€ν μ²λ₯Ό λ¨μνν μ μμ΅λλ€.
κΈλ‘λ² μ ν리μΌμ΄μ μ μν κ³ λ €μ¬ν
μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ μ ν리μΌμ΄μ μ κ°λ°ν λ, 컨ν μ€νΈ μ λ ν° ν¨ν΄μ ꡬννλ©΄μ λ€μ μμλ₯Ό κ³ λ €ν΄μΌ ν©λλ€:
- κ΅μ ν(i18n): μ ν리μΌμ΄μ μ΄ μ¬λ¬ μΈμ΄λ₯Ό μ§μνλ κ²½μ°, Contextκ° μ¬μ©μμ μΈμ΄ μ€μ μ μ μ₯νκ³ μΈμ΄κ° λ³κ²½λ λ μ»΄ν¬λνΈκ° 리λ λλ§λλλ‘ ν΄μΌ ν©λλ€. νμ§λ§ λ€λ₯Έ μ»΄ν¬λνΈκ° λΆνμνκ² λ¦¬λ λλ§λλ κ²μ λ°©μ§νκΈ° μν΄ μ»¨ν μ€νΈ μ λ ν° ν¨ν΄μ μ μ©νμΈμ. μλ₯Ό λ€μ΄, ν΅ν λ³νκΈ° μ»΄ν¬λνΈλ μ¬μ©μμ μμΉκ° λ³κ²½λμ΄ κΈ°λ³Έ ν΅νμ μν₯μ μ€ λλ§ λ¦¬λ λλ§λλ©΄ λ©λλ€.
- μ§μν(l10n): λ°μ΄ν° μμ(μ: λ μ§ λ° μκ° νμ, μ«μ νμ)μ λ¬Ένμ μ°¨μ΄λ₯Ό κ³ λ €νμΈμ. Contextλ₯Ό μ¬μ©νμ¬ μ§μν μ€μ μ μ μ₯νκ³ μ»΄ν¬λνΈκ° μ¬μ©μμ λ‘μΌμΌμ λ°λΌ λ°μ΄ν°λ₯Ό λ λλ§νλλ‘ νμΈμ. μ΄ κ²½μ°μλ μ λ ν° ν¨ν΄μ μ μ©ν©λλ€.
- μκ°λ: μ ν리μΌμ΄μ μ΄ μκ°μ λ―Όκ°ν μ 보λ₯Ό νμνλ κ²½μ°, μκ°λλ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬ν΄μΌ ν©λλ€. Contextλ₯Ό μ¬μ©νμ¬ μ¬μ©μμ μκ°λλ₯Ό μ μ₯νκ³ μ»΄ν¬λνΈκ° μ¬μ©μμ νμ§ μκ°μΌλ‘ μκ°μ νμνλλ‘ νμΈμ.
- μ κ·Όμ±(a11y): μ ν리μΌμ΄μ μ΄ μ₯μ λ₯Ό κ°μ§ μ¬μ©μμκ² μ κ·Ό κ°λ₯νλλ‘ ν΄μΌ ν©λλ€. Contextλ₯Ό μ¬μ©νμ¬ μ κ·Όμ± μ€μ (μ: κΈκΌ΄ ν¬κΈ°, μμ λλΉ)μ μ μ₯νκ³ μ»΄ν¬λνΈκ° μ΄λ¬ν μ€μ μ μ‘΄μ€νλλ‘ νμΈμ.
κ²°λ‘
리μ‘νΈ μ»¨ν
μ€νΈ μ
λ ν° ν¨ν΄μ 리μ‘νΈ μ ν리μΌμ΄μ
μμ 리λ λλ§μ μ΅μ ννκ³ μ±λ₯μ ν₯μμν€λ λ° μ μ©ν κΈ°μ μ
λλ€. μ»΄ν¬λνΈκ° νμν Contextμ νΉμ λΆλΆμλ§ κ΅¬λ
νλλ‘ ν¨μΌλ‘μ¨, λΆνμν 리λ λλ§μ ν¬κ² μ€μ΄κ³ λ λ°μμ± μκ³ ν¨μ¨μ μΈ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€. μ΅λμ μ΅μ νλ₯Ό μν΄ μ
λ ν°μ Provider κ°μ λ©λͺ¨μ΄μ¦νλ κ²μ μμ§ λ§μΈμ. ꡬνμ λ¨μννκΈ° μν΄ use-context-selector
μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ³ λ €ν΄ λ³΄μΈμ. μ μ λ 볡μ‘ν μ ν리μΌμ΄μ
μ ꡬμΆν¨μ λ°λΌ, νΉν μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ ν λ, 컨ν
μ€νΈ μ
λ ν° ν¨ν΄κ³Ό κ°μ κΈ°μ μ μ΄ν΄νκ³ νμ©νλ κ²μ μ±λ₯μ μ μ§νκ³ νλ₯ν μ¬μ©μ κ²½νμ μ 곡νλ λ° λ§€μ° μ€μν κ²μ
λλ€.